/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.corespring.restaurant.web.controller;

import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.support.SessionStatus;
import org.corespring.restaurant.model.Perfil;
import org.corespring.restaurant.model.Usuario;
import org.corespring.restaurant.service.UsuarioManager;
import org.corespring.restaurant.utils.UtilsSeguridad;
//import org.corespring.restaurant.service.validator.UsuarioValidator;

@Controller
public class UsuarioController {

    //@Autowired
    //private UsuarioDao usuariodao;
    private UsuarioManager usuarioManager;
    //private UsuarioValidator usuarioValidator;

    @Autowired
    public UsuarioController(UsuarioManager usuarioManager) {
        this.usuarioManager = usuarioManager;
        //this.usuarioValidator = new UsuarioValidator();
    }

    @RequestMapping("/adm_usuarios.htm")
    public void adm_usuarios(Model model, @ModelAttribute("usuario") Usuario usuario) {
        List<Usuario> usuarios = usuarioManager.obtenerListaUsuarios();
        model.addAttribute("usuarios", usuarios);
        model.addAttribute("usuario", usuario);
        //return "redirect:html/adm_usuarios.jsp";
    }

    @RequestMapping("/adm_principal.htm")
    public void adm_principal() {
    }

    @RequestMapping("/adm_login.htm")
    public void adm_login() {
    }

    @RequestMapping(value = "/adm_registroUsuario.htm", method = RequestMethod.GET)
    public
    @ModelAttribute("usuario")
    Usuario obtenerUsuario(
            @RequestParam(value = "idusuario", required = false) String idUsuario, HttpServletRequest request) {
        if (idUsuario == null) {
            return new Usuario();
        }
        if (!(idUsuario.isEmpty() || idUsuario.equals(""))) {
            Usuario usuario = usuarioManager.obtenerUsuarioById(idUsuario);
            if (usuario == null) {
                return new Usuario();
            }
//                else {
//                try {
//                    usuario.setPasw(UtilsSeguridad.desencripta(usuario.getPasw()));
//                } catch (Exception ex) {
//                }
//            }
            return usuario;
        }
        return new Usuario();
    }

    @RequestMapping(value = "/adm_registroUsuario.htm", method = RequestMethod.POST)
    public String guardarUsuario(@RequestParam(value = "cboEstado", required = false) char estado,
            @RequestParam(value = "txtPwd", required = false) String pwd, @ModelAttribute("usuario") Usuario usuario,
            BindingResult result, SessionStatus status) {
        Date fecha = new Date();
        String hora = fecha.getHours() + ":" + fecha.getMinutes() + ":" + fecha.getSeconds();
        usuario.setEreg(estado);
        usuario.setFreg(fecha);
        usuario.setHreg(hora);
        usuario.setUreg("admin");
        if (pwd != null) {
            try {
                String encripta = UtilsSeguridad.encripta(pwd);
                usuario.setPasw(encripta);
                //String desencripta = UtilsSeguridad.desencripta(encripta);
            } catch (Exception ex) {
            }
        }
        usuarioManager.guardarUsuario(usuario);
        return "redirect:adm_usuarios.htm";
    }

    @ModelAttribute("perfiles")
    public List<Perfil> listarPerfiles() {

        List<Perfil> perfiles = usuarioManager.obtenerListaPerfiles();
        return perfiles;
    }

    @RequestMapping("/eliminarUsuario.htm")
    public String eliminarUsuario(
            @RequestParam(value = "idUsuario", required = false) String idUsuario) {
        usuarioManager.eliminarUsuario(idUsuario);
        return "redirect:adm_usuarios.htm";
    }

    @RequestMapping("/adm_usuarios_x_perfil.htm")
    public void adm_usuarios_x_perfil(
            @RequestParam(value = "idperfil", required = false) String idPerfil,
            Model model) {
        List<Usuario> usuarios = usuarioManager.obtenerListaUsuariosPorPerfil(idPerfil);
        model.addAttribute("usuariosxperfil", usuarios);
        //model.addAttribute("usuarioxperfil", usuario);
    }

    @RequestMapping(value = "/login.htm", method = RequestMethod.POST)
    public String login(Model model,
            @RequestParam(value = "usuario", required = false) String usuario,
            @RequestParam(value = "pwd", required = false) String pwd) {
        Usuario u = usuarioManager.obtenerUsuarioById(usuario);
        if (u == null) {
            return "redirect:adm_login.htm";
        } else {
            try {
                String encripta = UtilsSeguridad.encripta(pwd);
                if (u.getPasw().equals(encripta)) {
                    return "redirect:adm_principal.htm";
                } else {
                    return "redirect:adm_login.htm";
                }
            } catch (Exception ex) {
                return "redirect:adm_login.htm";
            }
        }
    }
}
